// 链接：https://ac.nowcoder.com/acm/problem/22212
// 来源：牛客网
//
// 题目描述
// 牛村的中央广场是一块5*5的矩阵空旷广场，广场上有且仅有一个救助箱，每天下班前，牛可乐都要把救助箱推回到广场的中心位置（第三行第三列），
// 牛可乐可以向上下左右四个方向推箱子，一次只能推动一个单位，请问牛可乐要推几次才能把救助箱推回中心位置？
//
// 输入描述:
// 输入5行，每一行5个整数，以空格隔开，数据保证只有一个1，代表救助箱，而且其他数都是0
// 输出描述:
// 输出一行，包含一个整数，表示最少的推箱子次数。
// 示例1
// 输入
// 复制
// 0 0 0 0 0
// 0 0 0 0 1
// 0 0 0 0 0
// 0 0 0 0 0
// 0 0 0 0 0
// 输出
// 复制
// 3
//
// #include <stdio.h>
// #include <stdlib.h>
//
// #define N 5  // 广场的大小
//
// // 定义四个方向，上、下、左、右
// int directions[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
//
// // BFS的队列结构
// typedef struct {
//     int x, y, steps;
// } Node;
//
// // 队列操作函数
// typedef struct {
//     Node data[250];  // 队列最大容纳数量
//     int front, rear;
// } Queue;
//
// // 初始化队列
// void initQueue(Queue* q) {
//     q->front = q->rear = 0;
// }
//
// // 入队操作
// void enqueue(Queue* q, Node node) {
//     q->data[q->rear++] = node;
// }
//
// // 出队操作
// Node dequeue(Queue* q) {
//     return q->data[q->front++];
// }
//
// // 判断位置是否合法
// int isValid(int x, int y, int visited[N][N]) {
//     return (x >= 0 && x < N && y >= 0 && y < N && visited[x][y] == 0);
// }
//
// // BFS算法，找最短路径
// int bfs(int startX, int startY) {
//     int visited[N][N] = {0};  // 访问标记
//     Queue q;
//     initQueue(&q);
//
//     // 从救助箱位置开始
//     enqueue(&q, (Node){startX, startY, 0});
//     visited[startX][startY] = 1;
//
//     while (q.front < q.rear) {
//         Node current = dequeue(&q);
//         int x = current.x, y = current.y, steps = current.steps;
//
//         // 如果已经到达目标位置 (2, 2)
//         if (x == 2 && y == 2) {
//             return steps;
//         }
//
//         // 搜索四个方向
//         for (int i = 0; i < 4; i++) {
//             int newX = x + directions[i][0];
//             int newY = y + directions[i][1];
//
//             if (isValid(newX, newY, visited)) {
//                 visited[newX][newY] = 1;
//                 enqueue(&q, (Node){newX, newY, steps + 1});
//             }
//         }
//     }
//
//     return -1;  // 理论上不会执行到这里
// }
//
// int main() {
//     int matrix[N][N];
//     int startX, startY;
//
//     // 输入矩阵
//     for (int i = 0; i < N; i++) {
//         for (int j = 0; j < N; j++) {
//             scanf("%d", &matrix[i][j]);
//             if (matrix[i][j] == 1) {
//                 startX = i;
//                 startY = j;
//             }
//         }
//     }
//
//     // 使用BFS找出最短路径
//     int result = bfs(startX, startY);
//     printf("%d\n", result);
//
//     return 0;
// }
//____________第二种方法man哈顿距离______________________________________________
// #include <stdio.h>
// #include <stdlib.h>
// int main() {
//     int matrix[5][5];
//     int x = -1, y = -1;
//
//     // 输入5行5列的矩阵
//     for (int i = 0; i < 5; i++) {
//         for (int j = 0; j < 5; j++) {
//             scanf("%d", &matrix[i][j]);
//             if (matrix[i][j] == 1) {
//                 x = i;
//                 y = j;
//             }
//         }
//     }
//
//     // 计算曼哈顿距离
//     int moves = abs(x - 2) + abs(y - 2);
//
//     // 输出最少的推箱子次数
//     printf("%d\n", moves);
//
//     return 0;
// }
